﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Alfa.Math {
	public class Quaternion : Vector {
		public Quaternion( )
			: base(4) {

		}
	}
}


//#region Assembly Microsoft.Xna.Framework.dll, v4.0.0.0
//// C:\Program Files (x86)\Microsoft XNA\XNA Game Studio\v4.0\References\Windows\x86\Microsoft.Xna.Framework.dll
//#endregion

//using Microsoft.Xna.Framework.Design;
//using System;
//using System.ComponentModel;
//using System.Diagnostics.CodeAnalysis;

//namespace Microsoft.Xna.Framework {
//	// Summary:
//	//     Defines a four-dimensional vector (x,y,z,w), which is used to efficiently
//	//     rotate an object about the (x, y, z) vector by the angle theta, where w =
//	//     cos(theta/2).
//	[Serializable]
//	[TypeConverter(typeof(QuaternionConverter))]
//	public struct Quaternion : IEquatable<Quaternion> {
//		// Summary:
//		//     Specifies the rotation component of the quaternion.
//		[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
//		public float W;
//		//
//		// Summary:
//		//     Specifies the x-value of the vector component of the quaternion.
//		[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
//		public float X;
//		//
//		// Summary:
//		//     Specifies the y-value of the vector component of the quaternion.
//		[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
//		public float Y;
//		//
//		// Summary:
//		//     Specifies the z-value of the vector component of the quaternion.
//		[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
//		public float Z;

//		//
//		// Summary:
//		//     Initializes a new instance of Quaternion.
//		//
//		// Parameters:
//		//   vectorPart:
//		//     The vector component of the quaternion.
//		//
//		//   scalarPart:
//		//     The rotation component of the quaternion.
//		public Quaternion(Vector3 vectorPart, float scalarPart);
//		//
//		// Summary:
//		//     Initializes a new instance of Quaternion.
//		//
//		// Parameters:
//		//   x:
//		//     The x-value of the quaternion.
//		//
//		//   y:
//		//     The y-value of the quaternion.
//		//
//		//   z:
//		//     The z-value of the quaternion.
//		//
//		//   w:
//		//     The w-value of the quaternion.
//		public Quaternion(float x, float y, float z, float w);

//		// Summary:
//		//     Flips the sign of each component of the quaternion.
//		//
//		// Parameters:
//		//   quaternion:
//		//     Source quaternion.
//		public static Quaternion operator -(Quaternion quaternion);
//		//
//		// Summary:
//		//     Subtracts a quaternion from another quaternion.
//		//
//		// Parameters:
//		//   quaternion1:
//		//     Source quaternion.
//		//
//		//   quaternion2:
//		//     Source quaternion.
//		public static Quaternion operator -(Quaternion quaternion1, Quaternion quaternion2);
//		//
//		// Summary:
//		//     Compare two Quaternions for inequality.
//		//
//		// Parameters:
//		//   quaternion1:
//		//     Source Quaternion.
//		//
//		//   quaternion2:
//		//     Source Quaternion.
//		public static bool operator !=(Quaternion quaternion1, Quaternion quaternion2);
//		//
//		// Summary:
//		//     Multiplies a quaternion by a scalar value.
//		//
//		// Parameters:
//		//   quaternion1:
//		//     Source quaternion.
//		//
//		//   scaleFactor:
//		//     Scalar value.
//		public static Quaternion operator *(Quaternion quaternion1, float scaleFactor);
//		//
//		// Summary:
//		//     Multiplies two quaternions.
//		//
//		// Parameters:
//		//   quaternion1:
//		//     Source quaternion.
//		//
//		//   quaternion2:
//		//     Source quaternion.
//		public static Quaternion operator *(Quaternion quaternion1, Quaternion quaternion2);
//		//
//		// Summary:
//		//     Divides a Quaternion by another Quaternion.
//		//
//		// Parameters:
//		//   quaternion1:
//		//     Source Quaternion.
//		//
//		//   quaternion2:
//		//     The divisor.
//		public static Quaternion operator /(Quaternion quaternion1, Quaternion quaternion2);
//		//
//		// Summary:
//		//     Adds two Quaternions.
//		//
//		// Parameters:
//		//   quaternion1:
//		//     Quaternion to add.
//		//
//		//   quaternion2:
//		//     Quaternion to add.
//		public static Quaternion operator +(Quaternion quaternion1, Quaternion quaternion2);
//		//
//		// Summary:
//		//     Compares two Quaternions for equality.
//		//
//		// Parameters:
//		//   quaternion1:
//		//     Source Quaternion.
//		//
//		//   quaternion2:
//		//     Source Quaternion.
//		public static bool operator ==(Quaternion quaternion1, Quaternion quaternion2);

//		// Summary:
//		//     Returns a Quaternion representing no rotation.
//		public static Quaternion Identity { get; }

//		// Summary:
//		//     Adds two Quaternions.
//		//
//		// Parameters:
//		//   quaternion1:
//		//     Quaternion to add.
//		//
//		//   quaternion2:
//		//     Quaternion to add.
//		public static Quaternion Add(Quaternion quaternion1, Quaternion quaternion2);
//		//
//		// Summary:
//		//     Adds two Quaternions.
//		//
//		// Parameters:
//		//   quaternion1:
//		//     Quaternion to add.
//		//
//		//   quaternion2:
//		//     Quaternion to add.
//		//
//		//   result:
//		//     [OutAttribute] Result of adding the Quaternions.
//		public static void Add(ref Quaternion quaternion1, ref Quaternion quaternion2, out Quaternion result);
//		//
//		// Summary:
//		//     Concatenates two Quaternions; the result represents the value1 rotation followed
//		//     by the value2 rotation.
//		//
//		// Parameters:
//		//   value1:
//		//     The first Quaternion rotation in the series.
//		//
//		//   value2:
//		//     The second Quaternion rotation in the series.
//		public static Quaternion Concatenate(Quaternion value1, Quaternion value2);
//		//
//		// Summary:
//		//     Concatenates two Quaternions; the result represents the value1 rotation followed
//		//     by the value2 rotation.
//		//
//		// Parameters:
//		//   value1:
//		//     The first Quaternion rotation in the series.
//		//
//		//   value2:
//		//     The second Quaternion rotation in the series.
//		//
//		//   result:
//		//     [OutAttribute] The Quaternion rotation representing the concatenation of
//		//     value1 followed by value2.
//		public static void Concatenate(ref Quaternion value1, ref Quaternion value2, out Quaternion result);
//		//
//		// Summary:
//		//     Transforms this Quaternion into its conjugate.
//		public void Conjugate( );
//		//
//		// Summary:
//		//     Returns the conjugate of a specified Quaternion.
//		//
//		// Parameters:
//		//   value:
//		//     The Quaternion of which to return the conjugate.
//		public static Quaternion Conjugate(Quaternion value);
//		//
//		// Summary:
//		//     Returns the conjugate of a specified Quaternion.
//		//
//		// Parameters:
//		//   value:
//		//     The Quaternion of which to return the conjugate.
//		//
//		//   result:
//		//     [OutAttribute] An existing Quaternion filled in to be the conjugate of the
//		//     specified one.
//		public static void Conjugate(ref Quaternion value, out Quaternion result);
//		//
//		// Summary:
//		//     Creates a Quaternion from a vector and an angle to rotate about the vector.
//		//
//		// Parameters:
//		//   axis:
//		//     The vector to rotate around.
//		//
//		//   angle:
//		//     The angle to rotate around the vector.
//		public static Quaternion CreateFromAxisAngle(Vector3 axis, float angle);
//		//
//		// Summary:
//		//     Creates a Quaternion from a vector and an angle to rotate about the vector.
//		//
//		// Parameters:
//		//   axis:
//		//     The vector to rotate around.
//		//
//		//   angle:
//		//     The angle to rotate around the vector.
//		//
//		//   result:
//		//     [OutAttribute] The created Quaternion.
//		public static void CreateFromAxisAngle(ref Vector3 axis, float angle, out Quaternion result);
//		//
//		// Summary:
//		//     Creates a Quaternion from a rotation Matrix.
//		//
//		// Parameters:
//		//   matrix:
//		//     The rotation Matrix to create the Quaternion from.
//		public static Quaternion CreateFromRotationMatrix(Matrix matrix);
//		//
//		// Summary:
//		//     Creates a Quaternion from a rotation Matrix.
//		//
//		// Parameters:
//		//   matrix:
//		//     The rotation Matrix to create the Quaternion from.
//		//
//		//   result:
//		//     [OutAttribute] The created Quaternion.
//		public static void CreateFromRotationMatrix(ref Matrix matrix, out Quaternion result);
//		//
//		// Summary:
//		//     Creates a new Quaternion from specified yaw, pitch, and roll angles.
//		//
//		// Parameters:
//		//   yaw:
//		//     The yaw angle, in radians, around the y-axis.
//		//
//		//   pitch:
//		//     The pitch angle, in radians, around the x-axis.
//		//
//		//   roll:
//		//     The roll angle, in radians, around the z-axis.
//		public static Quaternion CreateFromYawPitchRoll(float yaw, float pitch, float roll);
//		//
//		// Summary:
//		//     Creates a new Quaternion from specified yaw, pitch, and roll angles.
//		//
//		// Parameters:
//		//   yaw:
//		//     The yaw angle, in radians, around the y-axis.
//		//
//		//   pitch:
//		//     The pitch angle, in radians, around the x-axis.
//		//
//		//   roll:
//		//     The roll angle, in radians, around the z-axis.
//		//
//		//   result:
//		//     [OutAttribute] An existing Quaternion filled in to express the specified
//		//     yaw, pitch, and roll angles.
//		public static void CreateFromYawPitchRoll(float yaw, float pitch, float roll, out Quaternion result);
//		//
//		// Summary:
//		//     Divides a Quaternion by another Quaternion.
//		//
//		// Parameters:
//		//   quaternion1:
//		//     Source Quaternion.
//		//
//		//   quaternion2:
//		//     The divisor.
//		public static Quaternion Divide(Quaternion quaternion1, Quaternion quaternion2);
//		//
//		// Summary:
//		//     Divides a Quaternion by another Quaternion.
//		//
//		// Parameters:
//		//   quaternion1:
//		//     Source Quaternion.
//		//
//		//   quaternion2:
//		//     The divisor.
//		//
//		//   result:
//		//     [OutAttribute] Result of the division.
//		public static void Divide(ref Quaternion quaternion1, ref Quaternion quaternion2, out Quaternion result);
//		//
//		// Summary:
//		//     Calculates the dot product of two Quaternions.
//		//
//		// Parameters:
//		//   quaternion1:
//		//     Source Quaternion.
//		//
//		//   quaternion2:
//		//     Source Quaternion.
//		public static float Dot(Quaternion quaternion1, Quaternion quaternion2);
//		//
//		// Summary:
//		//     Calculates the dot product of two Quaternions.
//		//
//		// Parameters:
//		//   quaternion1:
//		//     Source Quaternion.
//		//
//		//   quaternion2:
//		//     Source Quaternion.
//		//
//		//   result:
//		//     [OutAttribute] Dot product of the Quaternions.
//		public static void Dot(ref Quaternion quaternion1, ref Quaternion quaternion2, out float result);
//		//
//		// Summary:
//		//     Returns a value that indicates whether the current instance is equal to a
//		//     specified object.
//		//
//		// Parameters:
//		//   obj:
//		//     Object to make the comparison with.
//		public override bool Equals(object obj);
//		//
//		// Summary:
//		//     Determines whether the specified Object is equal to the Quaternion.
//		//
//		// Parameters:
//		//   other:
//		//     The Quaternion to compare with the current Quaternion.
//		public bool Equals(Quaternion other);
//		//
//		// Summary:
//		//     Get the hash code of this object.
//		public override int GetHashCode( );
//		//
//		// Summary:
//		//     Returns the inverse of a Quaternion.
//		//
//		// Parameters:
//		//   quaternion:
//		//     Source Quaternion.
//		public static Quaternion Inverse(Quaternion quaternion);
//		//
//		// Summary:
//		//     Returns the inverse of a Quaternion.
//		//
//		// Parameters:
//		//   quaternion:
//		//     Source Quaternion.
//		//
//		//   result:
//		//     [OutAttribute] The inverse of the Quaternion.
//		public static void Inverse(ref Quaternion quaternion, out Quaternion result);
//		//
//		// Summary:
//		//     Calculates the length of a Quaternion.
//		public float Length( );
//		//
//		// Summary:
//		//     Calculates the length squared of a Quaternion.
//		public float LengthSquared( );
//		//
//		// Summary:
//		//     Linearly interpolates between two quaternions.
//		//
//		// Parameters:
//		//   quaternion1:
//		//     Source quaternion.
//		//
//		//   quaternion2:
//		//     Source quaternion.
//		//
//		//   amount:
//		//     Value indicating how far to interpolate between the quaternions.
//		public static Quaternion Lerp(Quaternion quaternion1, Quaternion quaternion2, float amount);
//		//
//		// Summary:
//		//     Linearly interpolates between two quaternions.
//		//
//		// Parameters:
//		//   quaternion1:
//		//     Source quaternion.
//		//
//		//   quaternion2:
//		//     Source quaternion.
//		//
//		//   amount:
//		//     Value indicating how far to interpolate between the quaternions.
//		//
//		//   result:
//		//     [OutAttribute] The resulting quaternion.
//		public static void Lerp(ref Quaternion quaternion1, ref Quaternion quaternion2, float amount, out Quaternion result);
//		//
//		// Summary:
//		//     Multiplies a quaternion by a scalar value.
//		//
//		// Parameters:
//		//   quaternion1:
//		//     Source quaternion.
//		//
//		//   scaleFactor:
//		//     Scalar value.
//		public static Quaternion Multiply(Quaternion quaternion1, float scaleFactor);
//		//
//		// Summary:
//		//     Multiplies two quaternions.
//		//
//		// Parameters:
//		//   quaternion1:
//		//     The quaternion on the left of the multiplication.
//		//
//		//   quaternion2:
//		//     The quaternion on the right of the multiplication.
//		public static Quaternion Multiply(Quaternion quaternion1, Quaternion quaternion2);
//		//
//		// Summary:
//		//     Multiplies a quaternion by a scalar value.
//		//
//		// Parameters:
//		//   quaternion1:
//		//     Source quaternion.
//		//
//		//   scaleFactor:
//		//     Scalar value.
//		//
//		//   result:
//		//     [OutAttribute] The result of the multiplication.
//		public static void Multiply(ref Quaternion quaternion1, float scaleFactor, out Quaternion result);
//		//
//		// Summary:
//		//     Multiplies two quaternions.
//		//
//		// Parameters:
//		//   quaternion1:
//		//     The quaternion on the left of the multiplication.
//		//
//		//   quaternion2:
//		//     The quaternion on the right of the multiplication.
//		//
//		//   result:
//		//     [OutAttribute] The result of the multiplication.
//		public static void Multiply(ref Quaternion quaternion1, ref Quaternion quaternion2, out Quaternion result);
//		//
//		// Summary:
//		//     Flips the sign of each component of the quaternion.
//		//
//		// Parameters:
//		//   quaternion:
//		//     Source quaternion.
//		public static Quaternion Negate(Quaternion quaternion);
//		//
//		// Summary:
//		//     Flips the sign of each component of the quaternion.
//		//
//		// Parameters:
//		//   quaternion:
//		//     Source quaternion.
//		//
//		//   result:
//		//     [OutAttribute] Negated quaternion.
//		public static void Negate(ref Quaternion quaternion, out Quaternion result);
//		//
//		// Summary:
//		//     Divides each component of the quaternion by the length of the quaternion.
//		public void Normalize( );
//		//
//		// Summary:
//		//     Divides each component of the quaternion by the length of the quaternion.
//		//
//		// Parameters:
//		//   quaternion:
//		//     Source quaternion.
//		public static Quaternion Normalize(Quaternion quaternion);
//		//
//		// Summary:
//		//     Divides each component of the quaternion by the length of the quaternion.
//		//
//		// Parameters:
//		//   quaternion:
//		//     Source quaternion.
//		//
//		//   result:
//		//     [OutAttribute] Normalized quaternion.
//		public static void Normalize(ref Quaternion quaternion, out Quaternion result);
//		//
//		// Summary:
//		//     Interpolates between two quaternions, using spherical linear interpolation.
//		//
//		// Parameters:
//		//   quaternion1:
//		//     Source quaternion.
//		//
//		//   quaternion2:
//		//     Source quaternion.
//		//
//		//   amount:
//		//     Value that indicates how far to interpolate between the quaternions.
//		public static Quaternion Slerp(Quaternion quaternion1, Quaternion quaternion2, float amount);
//		//
//		// Summary:
//		//     Interpolates between two quaternions, using spherical linear interpolation.
//		//
//		// Parameters:
//		//   quaternion1:
//		//     Source quaternion.
//		//
//		//   quaternion2:
//		//     Source quaternion.
//		//
//		//   amount:
//		//     Value that indicates how far to interpolate between the quaternions.
//		//
//		//   result:
//		//     [OutAttribute] Result of the interpolation.
//		public static void Slerp(ref Quaternion quaternion1, ref Quaternion quaternion2, float amount, out Quaternion result);
//		//
//		// Summary:
//		//     Subtracts a quaternion from another quaternion.
//		//
//		// Parameters:
//		//   quaternion1:
//		//     Source quaternion.
//		//
//		//   quaternion2:
//		//     Source quaternion.
//		public static Quaternion Subtract(Quaternion quaternion1, Quaternion quaternion2);
//		//
//		// Summary:
//		//     Subtracts a quaternion from another quaternion.
//		//
//		// Parameters:
//		//   quaternion1:
//		//     Source quaternion.
//		//
//		//   quaternion2:
//		//     Source quaternion.
//		//
//		//   result:
//		//     [OutAttribute] Result of the subtraction.
//		public static void Subtract(ref Quaternion quaternion1, ref Quaternion quaternion2, out Quaternion result);
//		//
//		// Summary:
//		//     Retireves a string representation of the current object.
//		public override string ToString( );
//	}
//}
